a tool for shared writing and social publishing
1import { z } from "zod";
2import { makeRoute } from "../lib";
3import type { Env } from "./route";
4import { getIdentityData } from "actions/getIdentityData";
5
6export type GetUserRecommendationsReturnType = Awaited<
7 ReturnType<(typeof get_user_recommendations)["handler"]>
8>;
9
10export const get_user_recommendations = makeRoute({
11 route: "get_user_recommendations",
12 input: z.object({
13 documentUris: z.array(z.string()),
14 }),
15 handler: async ({ documentUris }, { supabase }: Pick<Env, "supabase">) => {
16 const identity = await getIdentityData();
17 const currentUserDid = identity?.atp_did;
18
19 if (!currentUserDid || documentUris.length === 0) {
20 return {
21 result: {} as Record<string, boolean>,
22 };
23 }
24
25 const { data: recommendations } = await supabase
26 .from("recommends_on_documents")
27 .select("document")
28 .eq("recommender_did", currentUserDid)
29 .in("document", documentUris);
30
31 const recommendedSet = new Set(recommendations?.map((r) => r.document));
32
33 const result: Record<string, boolean> = {};
34 for (const uri of documentUris) {
35 result[uri] = recommendedSet.has(uri);
36 }
37
38 return { result };
39 },
40});